From 2737c67ccefeade89af596700fdfc41d7fcf3588 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 20 Aug 2014 23:19:59 +0200 Subject: [PATCH] css: Round shadow extents properly Otherwise drawing will be clipped. Testcase included --- gtk/gtkcssshadowsvalue.c | 10 ++++---- testsuite/reftests/Makefile.am | 3 +++ testsuite/reftests/shadow-clip-rounding.css | 9 ++++++++ .../reftests/shadow-clip-rounding.ref.ui | 23 +++++++++++++++++++ testsuite/reftests/shadow-clip-rounding.ui | 23 +++++++++++++++++++ 5 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 testsuite/reftests/shadow-clip-rounding.css create mode 100644 testsuite/reftests/shadow-clip-rounding.ref.ui create mode 100644 testsuite/reftests/shadow-clip-rounding.ui diff --git a/gtk/gtkcssshadowsvalue.c b/gtk/gtkcssshadowsvalue.c index 6aafa92ce4..f99401adcf 100644 --- a/gtk/gtkcssshadowsvalue.c +++ b/gtk/gtkcssshadowsvalue.c @@ -21,6 +21,8 @@ #include "gtkcssshadowsvalueprivate.h" +#include + #include "gtkcairoblurprivate.h" #include "gtkcssshadowvalueprivate.h" @@ -337,10 +339,10 @@ _gtk_css_shadows_value_get_extents (const GtkCssValue *shadows, &radius, &spread); clip_radius = _gtk_cairo_blur_compute_pixels (radius); - b.top = MAX (0, clip_radius + spread - voffset); - b.right = MAX (0, clip_radius + spread + hoffset); - b.bottom = MAX (0, clip_radius + spread + voffset); - b.left = MAX (0, clip_radius + spread - hoffset); + b.top = MAX (0, ceil (clip_radius + spread - voffset)); + b.right = MAX (0, ceil (clip_radius + spread + hoffset)); + b.bottom = MAX (0, ceil (clip_radius + spread + voffset)); + b.left = MAX (0, ceil (clip_radius + spread - hoffset)); border->top = MAX (border->top, b.top); border->right = MAX (border->right, b.right); diff --git a/testsuite/reftests/Makefile.am b/testsuite/reftests/Makefile.am index 103b523fde..f88876e90e 100644 --- a/testsuite/reftests/Makefile.am +++ b/testsuite/reftests/Makefile.am @@ -337,6 +337,9 @@ testdata = \ separator-size.ui \ set-default-direction.ui \ set-default-direction.ref.ui \ + shadow-clip-rounding.css \ + shadow-clip-rounding.ref.ui \ + shadow-clip-rounding.ui \ shorthand-entry-border.css \ shorthand-entry-border.ref.ui \ shorthand-entry-border.ui \ diff --git a/testsuite/reftests/shadow-clip-rounding.css b/testsuite/reftests/shadow-clip-rounding.css new file mode 100644 index 0000000000..2a4912af76 --- /dev/null +++ b/testsuite/reftests/shadow-clip-rounding.css @@ -0,0 +1,9 @@ +@import "reset-to-defaults.css"; + +.test { + box-shadow: 0 0.99999px red; +} + +.reference { + box-shadow: 0 1px red; +} diff --git a/testsuite/reftests/shadow-clip-rounding.ref.ui b/testsuite/reftests/shadow-clip-rounding.ref.ui new file mode 100644 index 0000000000..31f744d3a9 --- /dev/null +++ b/testsuite/reftests/shadow-clip-rounding.ref.ui @@ -0,0 +1,23 @@ + + + + + + 100 + 100 + False + popup + + + True + False + center + center + X + + + + + diff --git a/testsuite/reftests/shadow-clip-rounding.ui b/testsuite/reftests/shadow-clip-rounding.ui new file mode 100644 index 0000000000..03741621b7 --- /dev/null +++ b/testsuite/reftests/shadow-clip-rounding.ui @@ -0,0 +1,23 @@ + + + + + + 100 + 100 + False + popup + + + True + False + center + center + X + + + + + -- 2.30.2